package com.ysh.web.controller;

import com.ysh.service.store.CompanyService;
import com.ysh.service.store.impl.CompanyServiceImpl;
import com.ysh.service.system.DeptService;
import com.ysh.service.system.UserService;
import com.ysh.service.system.impl.DeptServiceImpl;
import com.ysh.service.system.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

/*
    抽取一个Servlet
    作用：
        1.用于一个Servelt处理多个功能，通过不同的方法名
        2.用于初始化service对象
 */
public class BaseServlet extends HttpServlet {
    CompanyService companyService = null;
    DeptService deptService = null;
    UserService userService = null;

    @Override
    public void init() throws ServletException {
        // 初始化实现类对象
        companyService = new CompanyServiceImpl();
        deptService = new DeptServiceImpl();
        userService = new UserServiceImpl();
    }

    /*
        根据页面请求不同方法的名称参数实现对应功能的方法
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.获取URI
        String uri = req.getRequestURI();
        // 截取请求中请求方法参数的名称
        String methodName = uri.substring(uri.lastIndexOf("/") + 1);

        // 获取执行的方法对象
        try {
            // 获取方法，无论私有还是公共的
            Method method = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            // 暴力反射
            method.setAccessible(true);
            // 执行方法
            method.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();

        }

    }
}
